
//ENTITE
function annuler(idForm) { 
	disableAllButton(idForm);
	var idUC = getIdUc(idForm);
	$.post('/outils/forwarder/Forwarder.php', { idUC: idUC, cmd: "annuler" }, function(data) { 
		retour = JSON.parse(data);
		if (retour.succes) {
			if (mode != modeTransition) {
				changerMode(idForm, modeAjout);
				viderChampResultat(idForm);
			}
		} else {
			$("form[id="+idForm+"]").find("#resultat").html(retour.detail);
		}
	});
}

function ajouter(idForm) {
	//Début d'initialisation de tous les champs
	$("#" + idForm).each(function(i){
		this.reset();
	});
	
	$("#" + idForm).find("span[id^=champ_formulaire_combo_box_entite_]").each(function(i){
		reinitialiserListeEntite($(this).attr("id"));
	});
	
	
	//Fin de l'initialisation de tous les champs
	var idUC = getIdUc(idForm);
	$.post('/outils/forwarder/Forwarder.php', { idUC: idUC, cmd: "ajouter" }, function(data) { 
		var retour = JSON.parse(data);
		if (retour.succes) {
			mode=modeAjout;
			setEtatInterfaceModeAjout(idForm);
			setTitreFormulaire(idForm);
			
			if (onAjout != null) {
				onAjout(idForm);
			}
		} else {
			$("form[id="+idForm+"]").find("#resultat").html(retour.detail);
		}
	});
}

function modifier(idForm, id) {
	var retour;
	var idUC = getIdUc(idForm);
	$.post('/outils/forwarder/Forwarder.php', { idUC: idUC, cmd: "modifier", id: id}, function(data) {
		retour = JSON.parse(data);
		if (retour.succes) {
			for(var key in retour){
				if (key != 'succes') {
					var valeur = retour[key];
					//TODO associer chaque champ à un nom d'attribut plutôt
					//var champ = $("#champ_formulaire_" + key);
					$("form[id="+idForm+"]").find("#champ_formulaire_" + key).each(function(){
						//champ.html(retour.detail);
						if ($(this).attr("type") == "checkbox") {
							if (valeur == "1") {
								$(this).attr("checked", "checked");
							} else {
								$(this).removeAttr("checked", "");
							}
						} else {
							$(this).val(valeur);
						}
					});
					
					$("form[id="+idForm+"]").find("#champ_formulaire_combo_box_entite_" + key).each(function(){
						var idComboBoxEntite = $(this).attr("id");
						reinitialiserListeEntite(idComboBoxEntite,"");
						var listeId = valeur.split(',');
						var champCombo = $(this).find('#combo_' + idComboBoxEntite);
						var mapSelection = [];
						for (var i=0; i<listeId.length; i++) {
							//alert("tableau[" + i + "] = " + listeId[i]);
							var id = listeId[i];
							
							champCombo.find('option[value='+id+']').each(function() {
								var libelle = $(this).html();
								mapSelection[id] = libelle;
							});
							supprimerValeurACombo(idComboBoxEntite, id);
						}
						afficherListeEntiteDansFormulaireFromMap(idForm, idComboBoxEntite,mapSelection);
					});
				}
			}
			
			viderChampResultat(idForm);
			setEtatInterfaceModeModification(idForm, id);
			applyDefaultFocus();
			mode=modeModification;
			setTitreFormulaire(idForm);
			if (onModification != null) {
				onModification(idForm);
			}
		} else {
			$("form[id="+idForm+"]").find("#resultat").html(retour.detail);
			//$('#resultat').html(retour.detail);
		}
	});
}

function supprimer(idForm, id, entitePresentation) {
	if (!confirm('Voulez vous vraiment supprimer "' + entitePresentation + '"')) {
		return;
	}
	disableAllButton();
	
	var retour;
	var idUC = getIdUc(idForm);
	$.post('/outils/forwarder/Forwarder.php', { idUC: idUC, cmd: "supprimer", id: id}, function(data) { 
		retour = JSON.parse(data);
		$("form[id="+idForm+"]").find("#resultat").html(retour.detail);
		//$('#resultat').html(retour.detail);
		if (retour.succes) {
			$.ajaxSetup({async:false});
			displayListe(idForm);
			$.ajaxSetup({async:true});
		}
		if (mode==modeAjout) {
			setEtatInterfaceModeAjout(idForm);
		} else {
			$.post('/outils/forwarder/Forwarder.php', {idUC: idUC, cmd: "getIdModifie"}, function(dataID) {
				var retourID = JSON.parse(dataID);
				if (retourID.succes) {
					setEtatInterfaceModeModification(idForm,retourID.id);
				} else {
					//$('#resultat').html(retourID.detail);
					$("form[id="+idForm+"]").find("#resultat").html(retourID.detail);
				}
			});
		}
	});
}

function valider(idForm) {
	$.ajaxSetup({async:false});
	disableAllButton(idForm);
	
	var idUC = getIdUc(idForm);
	var parametres = { idUC: idUC, cmd: "valider"};
	var prefixeChampFormulaire = "champ_formulaire_";
	
	//champs de base
	$("form[id="+idForm+"]").find(":input[id^=" + prefixeChampFormulaire + "]").each(function(i) {
		var nomChamp = this.id.substring (prefixeChampFormulaire.length);
		var value = this.value;
		if (this.type == "checkbox") {
			parametres[nomChamp] = this.checked;
		} else {
			parametres[nomChamp] = this.value;
		}
	});
	
	//Champ combo box entité
	var prefixeChampComboBoxEntite='champ_formulaire_combo_box_entite_';
	$("form[id="+idForm+"]").find("span[id^="+prefixeChampComboBoxEntite+"]").each(function(i) {
		var nomChamp = this.id.substring (prefixeChampComboBoxEntite.length);
		var value = "";
		$(this).find("span[id^=libelle_]").each(function(i) {
			value += $(this).attr('key') + '|';
		});
		parametres[nomChamp] = value;
	});
	
	var retour;
	$.post('/outils/forwarder/Forwarder.php', parametres, function(data) { 
		retour = JSON.parse(data);
	});
	//$('#resultat').html(retour.detail);
	$("form[id="+idForm+"]").find("#resultat").html(retour.detail);
	if (retour.succes) {
		displayListe(idForm);
		changerMode(idForm,modeAjout);
	} else {
		if (mode==modeAjout) {
			setEtatInterfaceModeAjout(idForm);
		} else {
			$.post('/outils/forwarder/Forwarder.php', {idUC: idUC, cmd: "getIdModifie"}, function(dataID) {
				var retourID = JSON.parse(dataID);
				if (retourID.succes) {
					setEtatInterfaceModeModification(idForm,retourID.id);
				} else {
					//$('#resultat').html(retourID.detail);
					$("form[id="+idForm+"]").find("#resultat").html(retourID.detail);
				}
			});
		}
	}
	$.ajaxSetup({async:true});
	return retour.succes;
}

//UTILITAIRE
var modeNonDefini='modeNonDefini';
var modeAjout='modeAjout';
var modeModification='modeModification';
var modeTransition='modeTransition';
var mode = modeNonDefini;

function getIdUc(idForm) {
	return $("form[id="+idForm+"]").parents("uc:first").attr("id");
} 
function disableAllButton(idForm) {
	$("form[id="+idForm+"]").find("button").attr('disabled', true);
}

function setEtatInterfaceModeModification(idForm,id) {
	var idListe = $("form[id="+idForm+"]").attr("listeLiee");
	$("#" + idListe).find("button").attr('disabled', false);
	$("#" + idListe).find("button[id*=_" + id + "]").attr('disabled', true);
	
	$("form[id="+idForm+"]").find("button").attr('disabled', false);
}

function setEtatInterfaceModeAjout(idForm) {
	var idListe = $("form[id="+idForm+"]").attr("listeLiee");
	$("#" + idListe).find("button").attr('disabled', false);
	
	$("form[id="+idForm+"]").find("button").not('#bouton_formulaire_annulation').attr('disabled', false);
	$("form[id="+idForm+"]").find("#bouton_formulaire_annulation").attr('disabled', true);
}

function setTitreFormulaire(idForm) {
	if (mode == modeAjout) {
		$("form[id="+idForm+"]").find('#titreFormulaire').html($("form[id="+idForm+"]").attr("titreajout") + ':');
	} else if (mode == modeModification) {
		$("form[id="+idForm+"]").find('#titreFormulaire').html($("form[id="+idForm+"]").attr("titremodification") + ':');
	} else {
		$("form[id="+idForm+"]").find('#titreFormulaire').html("{MODE INCONNU}");
	}
}

function chargerUC(idUc, idDivDestination) {
	$("uc").remove();
	jQuery('<uc></uc>', {
	    id: idUc
	}).appendTo($('#' + idDivDestination));
	
	$.ajaxSetup({async:true});
	$("button[id*=bouton_formulaire_]").attr('disabled', true);
	afficherChargementDans(idUc);
	
	
	$.post('/outils/forwarder/Forwarder.php', {"cmd" : "chargerUC", "idUC" : idUc}, function(data) { 
		$('uc').html(data); 
		addClickHandlers();
		
		$("button[id*=bouton_formulaire_]").attr('disabled', false);
		$("form").each(function(i) {
			var idForm = this.id; 
			//passage en mode synchrone pour que la liste ne s'affiche pas avant que 
			//le mode ajout soit fini
			$.ajaxSetup({async:false});
			changerMode(idForm, modeAjout);
			$.ajaxSetup({async:true});
			displayListe(idForm);
		});
	}); 
}

function charger(page, parametre) {
	$.ajaxSetup({async:true});
	$("button[id*=bouton_formulaire_]").attr('disabled', true);
	afficherChargementDans("contenu");
	$.post(page, {parametre : parametre}, function(data) { 
		$('#contenu').html(data); 
		addClickHandlers();
		
		$("button[id*=bouton_formulaire_]").attr('disabled', false);
		$("form").each(function(i) {
			var idForm = this.id; 
			//passage en mode synchrone pour que la liste ne s'affiche pas avant que 
			//le mode ajout soit fini
			$.ajaxSetup({async:false});
			changerMode(idForm, modeAjout);
			$.ajaxSetup({async:true});
			displayListe(idForm);
		});
	}); 
}

function chargerSimple(page, parametre) {
	$("button[id*=bouton_admin_section]").attr('disabled', true);
	afficherChargementDans("contenu");
	$.post(page, {parametre : parametre}, function(data) { 
		$('#contenu').html(data); 
		addClickHandlers();
		$("button[id*=bouton_admin_section]").attr('disabled', false);
	}); 
}

function displayListe(idForm) {
	var idUC = getIdUc(idForm);
	$.post('/outils/forwarder/Forwarder.php', { idUC: idUC, cmd: "afficherListeAvecModif" }, function(data) {
		var idListe = $("form[id="+idForm+"]").attr('listeLiee');
		$('#'+idListe).html(data); 
		addClickHandlers();
	});
}

function changerMode(idForm, nouveauMode, id) {
	mode = modeTransition;
	disableAllButton(idForm);

	//annulation de l'ajout/modif en cours
	$.ajaxSetup({async:false});
	annuler(idForm);
	$.ajaxSetup({async:true});
	
	if (nouveauMode == modeModification) {
		modifier(idForm, id);
	} else if (nouveauMode == modeAjout) {
		ajouter(idForm);
	}
}

function viderChampResultat(idForm) {
	$("form[id="+idForm+"]").find("#resultat").html("");
}

//////////////GESTION DES OBJETS LISTE////////////
function remplirListeEntiteDispo(idComboBoxEntite, recherche) {
	//TODO faire un système de classe de recherche au niveau de l'entité
	$.post('/outils/forwarder/ForwarderRechercheListe.php', { recherche: recherche}, function(data) { 
		retour = JSON.parse(data);
		var select = $('#combo_' + idComboBoxEntite);
		select.children().remove();
		for(var key in retour){
			if (key != 'succes') {
				ajouterValeurACombo(select, key, retour[key]);
			}
		}
		updateEtatBoutonComboBoxEntite(idComboBoxEntite);
		trierComboParValeur("combo_"+idComboBoxEntite);
	});
}

function ajouterValeurACombo(select, valeur, libelle) {
	var option = $("<option/>");
	var optionClone = null;
	if ($('#' + select.attr('id') + "_"+valeur).size() == 0) {
		//si l'élément n'est pas déjà dans la liste
		optionClone = option.clone(true);
		optionClone.val(valeur);
		optionClone.text(libelle);
		select.append(optionClone);	
	}
}

function updateEtatBoutonComboBoxEntite(idComboBoxEntite) {
	var select = $('#combo_' + idComboBoxEntite);
	if (select.children().size() == 0) {
		$("#button_ajouter_" + idComboBoxEntite).attr('disabled', true);
	} else {
		$("#button_ajouter_" + idComboBoxEntite).attr('disabled', false);
	}
}

function trierComboParValeur(idCombo) {
	$('#' + idCombo).children().sort(function(a,b){
		return $(a).val() > $(b).val() ? 1 : -1;
	}).remove().appendTo('#' + idCombo);
}

function ajouterEntiteAListe(idForm, nomClasseRecherche,idObjet, idComboBoxEntite) {
	$.ajaxSetup({async:false});
	var retour;
	var idUC = getIdUc(idForm);
	$.post('/outils/forwarder/Forwarder.php', { idUC: idUC, cmd: getMethodeAjoutComboBoxEntite(idComboBoxEntite), idObjet: idObjet}, function(data) { 
		var retour = JSON.parse(data);
		if (retour.succes) {
			afficherListeEntiteDansFormulaire(idForm,idUC, idComboBoxEntite);
			//remplirListeEntiteDispo(idComboBoxEntite,nomClasseRecherche);
			
			//supprime l'option qui vient d'être ajoutée de la combo
			supprimerValeurACombo(idComboBoxEntite, idObjet)
		} else {
			var idList = "list_" + idComboBoxEntite;
			$("#" + idList).html("Erreur inattendue lors de l'ajout");
		}
	});
	$.ajaxSetup({async:true});
}

function supprimerValeurACombo(idComboBoxEntite, key) {
	$('#combo_' + idComboBoxEntite).find("option[value="+key+"]").remove();
	updateEtatBoutonComboBoxEntite(idComboBoxEntite);
}

function supprimerEntiteAListe(idForm, idObjet, idComboBoxEntite) {
	$.ajaxSetup({async:false});
	var idUC = getIdUc(idForm);
	$.post('/outils/forwarder/Forwarder.php', {  idUC: idUC, cmd: getMethodeDeleteComboBoxEntite(idComboBoxEntite), idObjet: idObjet, messageListeVide: getMessageListeVideComboBoxEntite(idComboBoxEntite) }, function(data) { 
		var retour = JSON.parse(data);
		if (retour.succes) {
			//récupère le libelle de l'option pour le remettre dans le combo 
			var libelleOption = $("#libelle_" + idComboBoxEntite + "_"+idObjet).html();
			
			afficherListeEntiteDansFormulaire(idForm,idUC, idComboBoxEntite);
			//remplirListeEntiteDispo(idComboBoxEntite,nomClasseRecherche);
			
			//Ajoute l'option qui vient d'être ajoutée à la combo
			var select = $('#combo_' + idComboBoxEntite);
			ajouterValeurACombo(select, idObjet, libelleOption);
			updateEtatBoutonComboBoxEntite(idComboBoxEntite);
			trierComboParValeur('combo_' + idComboBoxEntite);
		} else {
			var idList = "list_" + idComboBoxEntite;
			$("#" + idList).html("Erreur inattendue lors de la suppression");
		}
	});
	$.ajaxSetup({async:true});
}

/**
 * Supprime toutes les valeurs sélectionnées et 
 * les remet dans la combo box
 */
function reinitialiserListeEntite(idComboBoxEntite) {
	var select = $('#combo_' + idComboBoxEntite);
	$("span[id^=libelle_" + idComboBoxEntite + "]").each(function(i){
		var libelleOption = $(this).html();
		var key = $(this).attr('key');
		ajouterValeurACombo(select, key, libelleOption);
	});
	$("#list_" + idComboBoxEntite).html(getMessageListeVideComboBoxEntite(idComboBoxEntite));
	updateEtatBoutonComboBoxEntite(idComboBoxEntite);
}

function afficherListeEntiteDansFormulaire(idForm,idUC, idComboBoxEntite) {
	$.post('/outils/forwarder/Forwarder.php', {  idUC: idUC, cmd: getMethodeGetComboBoxEntite(idComboBoxEntite)}, function(data) { 
		var retour = JSON.parse(data);
		afficherListeEntiteDansFormulaireFromMap(idForm, idComboBoxEntite,retour);
	});
}

function afficherListeEntiteDansFormulaireFromMap(idForm, idComboBoxEntite, map) {
	var idList = "list_" + idComboBoxEntite;
	listeElement = "";
	for(var key in map){
		if (key != 'succes') {
			listeElement =listeElement+ "<tr id='" + idComboBoxEntite + "_"+key+"' class='tableEntiteLiee'><td width='200px'>- <span key='" + key + "' id='libelle_" + idComboBoxEntite + "_"+key+"'>" + map[key] + "</span></td><td> <a href=\"javascript:supprimerEntiteAListe('"+idForm + "'," + key +",'"+idComboBoxEntite + "');\"><img src='/icones/supprimer.png' onMouseOut=\"src='/icones/supprimer.png'\" onMouseOver=\"src='/icones/supprimer-hover.png'\"/></a></td></tr>";
		}
	}
	if (listeElement == "") {
		$("#" + idList).html(getMessageListeVideComboBoxEntite(idComboBoxEntite));
	} else {
		$("#" + idList).html("<table id='table_selection_" + idComboBoxEntite + "' cellspacing='0'>" + listeElement + "</table>");
	}
}

function getMethodeGetComboBoxEntite(idComboBoxEntite) {
	return $("#"+idComboBoxEntite).attr("nomMethodeGet");
}

function getMethodeDeleteComboBoxEntite(idComboBoxEntite) {
	return $("#"+idComboBoxEntite).attr("nomMethodeDelete");
}

function getMethodeAjoutComboBoxEntite(idComboBoxEntite) {
	return $("#"+idComboBoxEntite).attr("nomMethodeAjout");
}

function getMessageListeVideComboBoxEntite(idComboBoxEntite) {
	return $("#"+idComboBoxEntite).attr("libelleListeVide");
}

function getHTMLElementListeEntiteCombo(idForm, idComboBoxEntite, idElement, libelleElement) {
	return "<tr id='" + idComboBoxEntite + "_"+idElement+"' class='tableEntiteLiee'><td width='200px'>- <span key='" + idElement + "' id='libelle_" + idComboBoxEntite + "_"+idElement+"'>" + libelleElement + "</span></td><td> <a href=\"javascript:supprimerEntiteAListe('"+idForm + "'," + key +",'"+idComboBoxEntite + "');\"><img src='/icones/supprimer.png' onMouseOut=\"src='/icones/supprimer.png'\" onMouseOver=\"src='/icones/supprimer-hover.png'\"/></a></td></tr>";
}